package api;

import interfaces.Notificador;

import java.util.Iterator;
import java.util.List;

public class Suceso {

	private String descripcion;
	private boolean cancelado;

	private Notificador objGenerador;
	private List<Suceso> sucesosQueCancela;
	
	//Para crear sucesos completos
	public Suceso(Notificador objGenerador, String descripcion, List<Suceso> sucesosQueCancela) {
		this.cancelado = false;
		this.objGenerador = objGenerador;
		this.descripcion = descripcion;
		this.sucesosQueCancela = sucesosQueCancela;
	}
	
	//Para crear sucesos sin objeto generador
	public Suceso(String descripcion, List<Suceso> sucesosQueCancela) {
		this.cancelado = false;
		this.objGenerador = null;
		this.descripcion = descripcion;
		this.sucesosQueCancela = sucesosQueCancela;
	}
	
	//Para crear sucesos para poner en una lista de sucesos cancelables
	public Suceso(String descripcion) {
		this.cancelado = false;
		this.objGenerador = null;
		this.descripcion = descripcion;
		this.sucesosQueCancela = null;
	}

	public Notificador getObjGenerador() {
		return objGenerador;
	}

	public void setObjGenerador(Notificador objGenerador) {
		this.objGenerador = objGenerador;
	}

	public String getDescripcion() {
		return descripcion;
	}
	
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public boolean isCancelado() {
		return cancelado;
	}

	public void setCancelado(boolean cancelado) {
		this.cancelado = cancelado;
	}
	
	public void cancelarSucesos(List<Suceso> sucesos) {		
		if (sucesos!=null && this.sucesosQueCancela!=null){
			if (!sucesos.isEmpty()){
				Iterator<Suceso> it = sucesos.iterator();
				while (it.hasNext()){
					Suceso siguiente = it.next();
					if (this.sucesosQueCancela.contains(siguiente)){
						siguiente.setCancelado(true);						
					}
				}
			}
		}		
	}
	
	public boolean equals(Object obj){	
		boolean salida = false;      
        if (obj != null && (obj.getClass().equals(this.getClass()))) {
           Suceso suceso = (Suceso)obj;           
           salida  = (this.descripcion.compareTo(suceso.getDescripcion()) == 0);
       }
       return salida;
	}
	
	public String toString(){
		return this.descripcion;// + "-" + this.objGenerador;
	}
}
